/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.vti.sisp_sicrim.model.entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlTransient;

import br.com.crud4j.core.model.Model;
import br.com.vti.sisp_sicrim.model.entity.enums.EstadoCivil;
import br.com.vti.sisp_sicrim.model.entity.enums.GrauInstrucao;
import br.com.vti.sisp_sicrim.model.entity.enums.Nacionalidade;
import br.com.vti.sisp_sicrim.model.entity.enums.Religiao;
import br.com.vti.sisp_sicrim.model.entity.enums.Sexo;
import br.com.vti.sisp_sicrim.model.entity.enums.Status;

/**
 *
 * @author ednardomatos
 */
@Entity
@Table(name = "t_ficha_criminal", catalog = "desenvolvimento", schema = "e_sisp_sicrim")
@SequenceGenerator(name = "seq_ficha_criminal", sequenceName = "e_sisp_sicrim.seq_ficha_criminal", initialValue = 1, allocationSize = 1)
public class FichaCriminal implements Model<Integer> {

	private static final long serialVersionUID = 1L;

	@Id
	@Basic(optional = false)
	@NotNull
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "seq_ficha_criminal")
	private Integer id;

	@Basic(optional = false)
	@NotNull
	@Column(name = "dt_nascimento")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dtNascimento;

	@Basic(optional = false)
	@NotNull
	@Size(min = 1, max = 100)
	private String nome;

	@Size(max = 100)
	private String alcunhas;

	@Basic(optional = false)
	@NotNull
	@Column(columnDefinition = "bpchar(1)")
	private Sexo sexo;

	@Column(columnDefinition = "bpchar(1)")
	private Nacionalidade nacionalidade;

    @ManyToOne
    @JoinColumn(name = "naturalidade", referencedColumnName = "id")
	private Municipio naturalidade;
    

	@Basic(optional = false)
	@NotNull
	@Size(min = 1, max = 100)
	@Column(name = "nm_mae")
	private String nmMae;

	@Size(max = 100)
	@Column(name = "nm_pai")
	private String nmPai;

	@Column(columnDefinition = "bpchar(1)")
	private GrauInstrucao escolaridade;

	private Integer telefone;

	private Integer celular;
	
	@Column(columnDefinition = "bpchar(1)")
	private Religiao religiao;

	@Column(name = "estado_civil", columnDefinition = "bpchar(1)")
	private EstadoCivil estadoCivil;

	@Size(max = 100)
	@Column(name = "nm_conjuge")
	private String nmConjuge;

	@Size(max = 30)
	private String rg;

	@Size(max = 11)
	private String cpf;

	@Size(max = 30)
	@Column(name = "nr_certidao_nasc")
	private String nrCertidaoNasc;

	@Size(max = 30)
	@Column(name = "nr_carteira_trabalho")
	private String nrCarteiraTrabalho;

	@Size(max = 30)
	@Column(name = "nr_titulo_eleitor")
	private String nrTituloEleitor;

	@Column(columnDefinition = "bpchar(1) default = 'A'")
	private Status status;

	@OneToMany(cascade = CascadeType.ALL, mappedBy = "fichaCriminal")
	private List<DadosFisicos> dadosFisicosList;

	public FichaCriminal() {
	}

	public FichaCriminal(Integer id) {
		this.id = id;
	}

	public FichaCriminal(Integer id, Date dtNascimento, String nome, Sexo sexo, String nmMae) {
		this.id = id;
		this.dtNascimento = dtNascimento;
		this.nome = nome;
		this.sexo = sexo;
		this.nmMae = nmMae;
	}

	public Date getDtNascimento() {
		return dtNascimento;
	}

	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getAlcunhas() {
		return alcunhas;
	}

	public void setAlcunhas(String alcunhas) {
		this.alcunhas = alcunhas;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNmMae() {
		return nmMae;
	}

	public void setNmMae(String nmMae) {
		this.nmMae = nmMae;
	}

	public String getNmPai() {
		return nmPai;
	}

	public void setNmPai(String nmPai) {
		this.nmPai = nmPai;
	}

	public Integer getTelefone() {
		return telefone;
	}

	public void setTelefone(Integer telefone) {
		this.telefone = telefone;
	}

	public Integer getCelular() {
		return celular;
	}

	public void setCelular(Integer celular) {
		this.celular = celular;
	}

	public String getNmConjuge() {
		return nmConjuge;
	}

	public void setNmConjuge(String nmConjuge) {
		this.nmConjuge = nmConjuge;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNrCertidaoNasc() {
		return nrCertidaoNasc;
	}

	public void setNrCertidaoNasc(String nrCertidaoNasc) {
		this.nrCertidaoNasc = nrCertidaoNasc;
	}

	public String getNrCarteiraTrabalho() {
		return nrCarteiraTrabalho;
	}

	public void setNrCarteiraTrabalho(String nrCarteiraTrabalho) {
		this.nrCarteiraTrabalho = nrCarteiraTrabalho;
	}

	public String getNrTituloEleitor() {
		return nrTituloEleitor;
	}

	public void setNrTituloEleitor(String nrTituloEleitor) {
		this.nrTituloEleitor = nrTituloEleitor;
	}

	@XmlTransient
	public List<DadosFisicos> getDadosFisicosList() {
		return dadosFisicosList;
	}

	public void setDadosFisicosList(List<DadosFisicos> dadosFisicosList) {
		this.dadosFisicosList = dadosFisicosList;
	}

	@Override
	public int hashCode() {
		int hash = 0;
		hash += (id != null ? id.hashCode() : 0);
		return hash;
	}

	@Override
	public boolean equals(Object object) {
		// TODO: Warning - this method won't work in the case the id fields are not set
		if (!(object instanceof FichaCriminal)) {
			return false;
		}
		FichaCriminal other = (FichaCriminal) object;
		if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "br.com.vti.sisp_sicrim.model.entity.FichaCriminal[ id=" + id + " ]";
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	public Municipio getNaturalidade() {
		return naturalidade;
	}

	public void setNaturalidade(Municipio naturalidade) {
		this.naturalidade = naturalidade;
	}

	public Nacionalidade getNacionalidade() {
		return nacionalidade;
	}

	public void setNacionalidade(Nacionalidade nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public GrauInstrucao getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(GrauInstrucao escolaridade) {
		this.escolaridade = escolaridade;
	}

	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(EstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public Religiao getReligiao() {
		return religiao;
	}

	public void setReligiao(Religiao religiao) {
		this.religiao = religiao;
	}

}
